home *** CD-ROM | disk | FTP | other *** search
/ Macworld Expo - Develope…Central & Net Innovations / Developer Central and Net Innovators (MacWorld Expo) (January 1999).iso / Developer Central / Metrowerks CodeWarrior / CodeWarrior Pro 4 Release Notes / Libraries Notes / MSL Release Notes / MSL 2.4 Release Notes (Pro3) < prev    next >
Encoding:
Text File  |  1998-04-06  |  38.9 KB  |  996 lines  |  [TEXT/CWIE]

  1. ========================================================================
  2. Metrowerks MSL 2.4 Pro 3  Release Notes 
  3. ========================================================================
  4.  
  5. Version: Metrowerks CodeWarrior 2.4, Pro 3
  6. Date:    March 19, 1998
  7. Authors: Vicki Scott, Michael Marcotty, Matt Fassiotto, Ron Liechty,
  8.          Howard Hinnant 
  9.           
  10. ========================================================================
  11.  
  12. ========================================================================
  13. New Features in This Version
  14. ========================================================================
  15.  
  16. *  The value for __MSL__ has been changed to reflect the major and minor
  17.    release identifier, and revision within that category.  Therefore,
  18.    the value for __MSL__ for all MSL2.4 releases is 0x24nn, where 24
  19.    refers to the major/minor release identifier (e.g., MSL 2.4), and nn
  20.    refers to the revision within the release.  In the past, this value
  21.    was inconsistent (i.e., it was 212 for Pro1, 22 for Pro2).   Hence, 
  22.    you may see release id's of 0x2402, 0x2403, 0x2500, and so on - meaning 
  23.    MSL 2.4, revision 3 (i.e., MSL 2.4fc3), MSL 2.4, revision 3 (i.e., 
  24.    MSL 2.4p1 - MSL 2.4, patch 1), MSL 2.5 (i.e., MSL 2.5a1 - first alpha 
  25.    prerelease of 2.5).
  26.  
  27. *  C9X functions for x86: 
  28.    - full implementation of the floating point unit interface as 
  29.      specified in fenv.h; additional functions feset/getprec    
  30.    - Implemented macros/functions isnormal, fpclassify, signbit, atanh, 
  31.      acosh, asinh, all rounding functions, exp2, expm1, log2, remainder, 
  32.      and remquo (fpce.obj)
  33.       
  34. *  SIOUX for Windows.  This is a preliminary version that will allow 
  35.    printing of a file, saving standard output to a file, and scrolling.
  36.    Additional SIOUX interface will be in the next release (e.g., cut
  37.    and paste, fonts, open and close files).  See notes below on 
  38.    "WinSIOUX in MSL 2.4" on how to use this feature.  
  39.  
  40. *  C++ library closely tracking the November 1997 Draft Standard.  There are
  41.    many changes in the routines, so please read the section on "C++
  42.    Library Update" below carefully to see if it affects your exiting
  43.    codes. 
  44.                                                                                    
  45. *  Ability to select C++ standard behavior for <cmath> or select
  46.    the existing <math.h> C functionality in your C++ programs.  See 
  47.    notes below on "Notes on <cmath> vs. <math.h>" and "Header Naming 
  48.    in MSL2.4" for details.  The default action for a C++ program in this
  49.    release is to behave like a C <math.h> file, even when the C++ compiler 
  50.    is selected by file type or by preference.  In future releases, we may
  51.    convert the C++ behavior to the intended C++ header specification, so
  52.    it would be wise to convert your programs as needed.
  53.    
  54. *  C header files have been changed from <name.h> to <cname> to
  55.    accommodate the changes in the C++ library without code duplication.
  56.    Please read notes below on "Header Naming in MSL2.4" as it may affect
  57.    your exiting codes.  When opening header files of the form <name.h> in
  58.    your applications, you will see that the <cname> file is an include
  59.    where the <cname> file actually contains all the code from the
  60.    original <name.h> file.  We have included all the header names in
  61.    the project files to facilitate faster opening of the header files.
  62.    
  63. *  C++ header files now comply to the Standard in name and in content.
  64.    This may affect what files you are currently including.  For example,
  65.    <bstring.h> is now <string>.  Please read the notes on "Header Naming
  66.    in MSL2.4" to see if your file includes have been affected.
  67.    
  68. *  Namespace std is fully supported in libraries.  Please read notes
  69.    "Namespace std Implementation in MSL 2.4" below carefully, as this is 
  70.    likely to affect your existing codes.  You may turn namespace std
  71.    off and rebuild the library if you wish.
  72.    
  73. *  Removed the need to include ansi_prefix files in the project file  
  74.    preferences.  All prefix files have been removed from the MSL library
  75.    projects.
  76.    
  77. *  Wide character support for the C library (C9X version).  But wide
  78.    character support is not yet available in the C++ library.  Multibyte
  79.    support is not yet available in either library.  See notes below on 
  80.    "Wide Character Support in MSL 2.4" for implementation details.
  81.  
  82. *  Improved pool_alloc routines to support new functions in Zone
  83.    Ranger for the Mac platforms.  
  84.    
  85. *  WASTE for Mac has been upgraded to 1.3 version.  Please note that
  86.    the directory "WASTE C/C++ Headers" has been removed and the files 
  87.    (LongCoords.h and WASTE.h) from that directory have been moved
  88.    into a new directory, Public Includes, under WASTE 1.3. 
  89.  
  90. *  POSIX stat/fstat function for x86 now implemented.
  91.  
  92. *  stdio.h (cstdio):  Added snprintf and vsnprintf functions from C9X
  93.    Standard.  For x86 platforms, _snprintf and _vsnprintf are aliases 
  94.    for compatibility with legacy code.
  95.    
  96.  
  97. ========================================================================
  98. Bugs Fixed in This Version
  99. ========================================================================
  100.  
  101. *  All known memory leaks in the C++ library are fixed
  102.  
  103. *  mem_fun routines in C++ now operational
  104.  
  105. *  abort_exit.c 
  106.    Fixes a bug in close of console window on the x86 when stdin has  
  107.    been closed. 
  108.  
  109. *  complex.h 
  110.    Removed extraneous declaration of pow function. 
  111.  
  112. *  Numerous C++ headers 
  113.    Removed all "#pragma dont_inline" statements for template functions.  
  114.    This was a bug introduced in CWP2 where some of the statements had 
  115.    been removed, but not all of them, causing inlining to be off in  
  116.    C++ functions. 
  117.    
  118. *  scanf.c 
  119.    Fixed a bug with the return value. 
  120.    
  121. *  math.h 
  122.    (MW02783)  
  123.    Fixed a bug in classification macros where parenthesis were missing. 
  124.    
  125. *  iterator
  126.    Move iterator fix from mcompile.h to iterator header file - see
  127.    notes below on __MSL_FIX_ITERATORS__ for details.
  128.    
  129. *  Fixed auto_ptr to use mutable. 
  130.      
  131. *  buffer_io.c, file_pos.c 
  132.    Fixed a problem with EOL differences between Mac and Win32.  
  133.    
  134. *  file_io.mac.c, path2fss.c 
  135.    Allows "." files to be opened on a Mac.
  136.    
  137. *  printf.c
  138.    Allowed the lf (ell f) specifier for doubles for backward compatibility 
  139.    with older C libraries.  The Standard states that lf is undefined, and
  140.    we chose to require Lf for doubles; however, legacy codes will not
  141.    execute properly under this constraint, so it has been relaxed in MSL.
  142.    
  143.    To bring MSL C more in accord with the C9X Standard, we have added the
  144.    hh length specifier for use with the d, i, o, u, x, and X conversion
  145.    specifiers to signify that they apply to long long int or unsigned long
  146.    long int arguments.  Previously, long long was specified as L (capital
  147.    ell).  This is no longer supported.
  148.  
  149. ========================================================================
  150. Known Bugs and Incompatibilities
  151. ========================================================================
  152.  
  153. *  slist and hash are not operational yet
  154.  
  155. *  auto_ptr is implemented to the Nov 96 Standard, not Nov 97 Standard
  156.  
  157. *  mem_fun_t functions do not meet ANSI Standard.  (This will be fixed
  158.    and will be in the next patch.)
  159.  
  160. *  locale incorrectly defines isprint, isspace, iscntrl, et al., as
  161.    is_print, is_space, is_cntrl, ....  (This has been fixed and will be
  162.    in the next patch.)
  163.  
  164. *  multibyte routines not implemented at all yet, and wide character
  165.    support is not available in C++
  166.  
  167. *  DebugNew - library no longer redefines new; still does not
  168.    support the array delete[] operator; memory leak reporting more 
  169.    leaks than there actually are (MW02460)
  170.  
  171. *  iterator_traits depends on a partial template specialization for 
  172.    pointer based iterator types.  Partial specializations are not 
  173.    supported by the compiler yet, so the __MSL_FIX_ITERATORS__ macro 
  174.    is still required for the iterator traits specializations.  Please 
  175.    refer to note below for information on when and how to use these
  176.    macros.  
  177.    
  178. *  Compiling locimp will take a considerable amount of time and
  179.    memory (this *will* be fixed in Pro4).  If your computer appears 
  180.    to lock up compiling locimp, be patient; it will eventually
  181.    complete.  Set your virtual memory >=64K if you have sufficient
  182.    ram.  (MW02103)   
  183.    
  184. *  MW00042
  185.    On Mac, O_RDWR mode for fopen incorrectly sets value to 0x0
  186.    
  187. *  MW00095
  188.    stdio.h declares bitfield file_kind to be 2-bits, but the related
  189.    enum declares 5 different values - bitfield is too short
  190.    
  191. *  Numerous win32 descrepancies:
  192.      MW00273
  193.      MW00288
  194.      MW00302
  195.      MW01564
  196.      MW01597
  197.      MW01785
  198.      MW02761
  199.      MW02814
  200.      MW02944
  201.      MW05905
  202.        POSIX exec functions, tzset missing on win32
  203.        putenv, _environ, __argc, __argv missig on win32
  204.        _ltow, tapi.h, winioctl.h missing on win32
  205.        some win32 constants are not set in MSL
  206.        win32 signal handler appears to fail at catching SIGINT
  207.        _access() won't read file if path is a directory in win32
  208.    
  209. *  MW02614 
  210.    MW02687 
  211.    On 68K for 8-byte doubles, using function pointers to ANSI math 
  212.    functions do not work.  
  213.    
  214. *  MW01261
  215.    Precision of printing doubles is incorrect even when values are 
  216.    exact (e.g., int).
  217.    
  218. *  MW03295
  219.    On Mac, cannot set creator and file type
  220.    
  221. *  MW03327
  222.    cin goes into an infinite loop if wrong data type entered (e.g.,
  223.    declare an input type to be integer and provide an ascii char as
  224.    input) 
  225.    
  226. ========================================================================
  227. Additional Notes
  228. ========================================================================
  229.  
  230. Disclaimer:
  231.  
  232. This library represents a major step forward in providing fully Standard
  233. compliant C and C++ libraries.  We strongly desire to be responsive to
  234. users' requests and needs; however, our position is that we uphold and
  235. implement the Standards behavior in both the C and C++ libraries.  If a
  236. behavior was provided by MSL but goes against the Standard, we reserve
  237. the right to modify the behavior to comply fully with the Standard.  If,
  238. however, a behavior is unspecified or not specifically forbidden by the
  239. Standard, we will continue to support it in the library.  We reserve the 
  240. right to use our discretion in implementing non-standard and 
  241. non-specified C and C++ library behavior.
  242.  
  243. ===================================================================
  244. __MSL_FIX_ITERATORS__
  245. ===================================================================
  246.  
  247. A design change in MSL 2.4 <vector> requires more aggressive use of the
  248. __MSL_FIX_ITERATORS__ macro.  So you may find that code which compiled
  249. under Pro2 no longer compiles under Pro3 unless you add the macro for
  250. your user defined class.  We anticipate a fix to this in mid-summer, 
  251. Pro 4 at the latest, and apologize for the inconvenience this has 
  252. caused.  When you use a class that contains interator_traits, you must
  253. use the macro.  For example, Pro 3 uses the method uninitialized_copy
  254. during push_back in class vector (note that deque does not use this
  255. method, so the macro will not be required when you use deque).  Since
  256. function uninitialized_copy requires iterator_traits, you will need 
  257. the macro.  The following example demonstrates:
  258.  
  259. #include <vector>
  260.  
  261. struct Foo { };    //  user defined class
  262. __MSL_FIX_ITERATORS__(Foo);  // macro will allow usage of iterator
  263.  
  264. void p()
  265. {
  266.     Foo x;
  267.     std::vector<Foo> pfoo;
  268.     pfoo.push_back(x);
  269. }
  270.  
  271. If you do not provide the macro, you will get a compile time syntax
  272. error when instantiating iterator_traits on your class.  Sometimes
  273. it is difficult to know why you got a syntax error, especially in a
  274. library routine.  The give away is instantiating iterator_traits in
  275. the iterator class.  When you see this, you know you must add the
  276. macro.
  277.  
  278. There are four macros:
  279.    
  280.        class user_class { }  
  281.        
  282.        __MSL_FIX_ITERATORS__ (user_class); 
  283.        __MSL_FIX_ITERATORS__ (const user_class); 
  284.        __MSL_FIX_ITERATORS__ (user_class *); 
  285.        __MSL_FIX_ITERATORS__ (user_class * const);  
  286.        
  287. Use the macro definition appropriate for your class.  
  288.  
  289. ===================================================================
  290. *  C++ Library Update
  291. ===================================================================
  292.  
  293.    The standard C++ library is now under namespace std.  This will
  294.    require either "using namespace std;" or a std:: prefix on names in
  295.    the library.  The library itself has also had a major upgrade to bring
  296.    it much closer to the C++ standard.
  297.  
  298.    <exception>
  299.    class exception no longer takes a string or const char* in its
  300.    constructor.
  301.  
  302.    <new>
  303.    You can now override 
  304.        void* operator new[](std::size_t size) throw(std::bad_alloc);
  305.    and
  306.        void  operator delete[](void* ptr) throw();
  307.  
  308.    <typeinfo>
  309.    class bad_cast no longer accepts a string or const char* in its
  310.    constructor.  It now has a what() method.
  311.  
  312.    class bad_typeid now has a what() method.
  313.  
  314.    <limits>
  315.    enum float_denorm_style has been added.  All of the numeric_limits
  316.    classes have been rewritten to be both complete and correct.
  317.  
  318.    <stdexcept>
  319.    All of the standard exception classes now have explicit constructors.
  320.    The class underflow_error has been added.
  321.  
  322.    <utility>
  323.    No interface changes (besides being put into namespace std).
  324.  
  325.    <memory>
  326.    uninitialized_fill_n() has a void return type.
  327.  
  328.    class allocator has:
  329.    const_pointer address (const_reference x) const;
  330.    void destroy (pointer p);
  331.    and has not:
  332.    size_type init_page_size ();
  333.    size_type init_page_size_small ();
  334.  
  335.    The copy constructor and assignment operator in auto_ptr now take
  336.    const arguments.
  337.  
  338.    auto_ptr has no
  339.    bool owns(void);
  340.  
  341.    <functional>
  342.  
  343.    20.3.8  Adaptors for pointers to members   [lib.member.pointer.adaptors]
  344.    has been partially implemented (omissions noted below).
  345.  
  346.    Implemented in MSL:
  347.        template<class S, class T> class mem_fun_t;
  348.        template<class S, class T, class A> class mem_fun1_t;
  349.        template<class S, class T>
  350.            mem_fun_t<S,T> mem_fun(S (T::*f)());
  351.        template<class S, class T> class mem_fun_ref_t;
  352.        template<class S, class T, class A> class mem_fun1_ref_t;
  353.        template<class S, class T>
  354.            mem_fun_ref_t<S,T> mem_fun_ref(S (T::*f)());
  355.  
  356.    Not yet implemented in MSL:
  357.        template<class S, class T, class A>
  358.            mem_fun1_t<S,T,A> mem_fun(S (T::*f)(A));
  359.        template<class S, class T, class A>
  360.            mem_fun1_ref_t<S,T,A> mem_fun_ref(S (T::*f)(A));
  361.  
  362.        template <class S, class T> class const_mem_fun_t;
  363.        template <class S, class T, class A> class const_mem_fun1_t;
  364.        template <class S, class T>
  365.          const_mem_fun_t<S,T> mem_fun(S (T::*f)() const);
  366.        template <class S, class T, class A>
  367.          const_mem_fun1_t<S,T,A> mem_fun(S (T::*f)(A) const);
  368.        template <class S, class T> class const_mem_fun_ref_t;
  369.        template <class S, class T, class A> class const_mem_fun1_ref_t;
  370.        template <class S, class T>
  371.           const_mem_fun_ref_t<S,T> mem_fun_ref(S (T::*f)() const);
  372.        template <class S, class T, class A>
  373.           const_mem_fun1_ref_t<S,T,A> mem_fun_ref(S (T::*f)(A) const);
  374.  
  375.    <iterator>
  376.  
  377.    class global_iterator has been renamed to iterator
  378.    iterator::distance_type renamed to iterator::difference_type.
  379.    pointer and reference typedefs added to iterator.
  380.  
  381.    class iterator_trait renamed to iterator_traits.
  382.    iterator_traits::distance_type renamed to 
  383.             iterator_traits::difference_type.
  384.    pointer and reference typedefs added to iterator_traits.
  385.  
  386.    Non-standard structs output_iterator, input_iterator, forward_iterator,
  387.    bidirectional_iterator and random_access_iterator removed.
  388.  
  389.    reverse_bidirectional_iterator removed.
  390.  
  391.    operator()-> has been added to all iterators, including the iterators
  392.    defined for all container classes.
  393.  
  394.    <algorthim>
  395.    no interface changes.
  396.  
  397.    Notes for all container classes:
  398.  
  399.    User supplied allocators are not going to work properly until we have
  400.    "member template" support from the compiler.  We apologize for any
  401.    inconvenience, and are working to remedy this situation as soon as 
  402.    possible.
  403.  
  404.    The containers are now "exception safe".  That is, they have a well 
  405.    defined, usable state after they throw an exception.
  406.  
  407.    <string>
  408.  
  409.    no interface changes.
  410.  
  411.    <list>
  412.  
  413.    no interface changes.
  414.  
  415.    <bitset>
  416.  
  417.    no interface changes.
  418.  
  419.    <deque>
  420.  
  421.    no interface changes.
  422.  
  423.    <vector>
  424.  
  425.    vector<bool> is now a template specialization.  This class has a method 
  426.    called flip() that is not present in the general template.
  427.  
  428.    <queue>
  429.  
  430.    no interface changes.
  431.  
  432.    <stack>
  433.  
  434.    In Pro 2, the user of <stack> had to include <deque> first.  This is no 
  435.    longer the case.
  436.  
  437.    <map>
  438.  
  439.    no interface changes.
  440.  
  441.    <set>
  442.  
  443.    The members begin(), end(), rbegin() and rend() now come in const and 
  444.    non-const versions.
  445.  
  446.    <complex>
  447.  
  448.    <complex> no longer includes the I/O library.  This means that if you 
  449.    don't want to do I/O with your complex numbers, you don't have to drag 
  450.    the I/O around in the headers.  But if you do want to do I/O with your 
  451.    complex numbers, then you have to include the proper I/O headers 
  452.    explicitly.  This behavior is consistent with other classes such as 
  453.    string and valarray.
  454.  
  455.    complex<T> pow (const complex<T>& cx, T re) has been removed.  There is 
  456.    still a complex<T> pow (const complex<T>& cx, const T& re)
  457.  
  458.    The value returned by complex<T> tanh (const complex<T>& cx) has been cut in half
  459.    to comply with standard mathematical definitions.
  460.  
  461.    <numeric>
  462.  
  463.    no interface changes.
  464.  
  465.    <valarray>
  466.  
  467.    valarray is no longer specialized for different types (although the user 
  468.    is free to do this).  valarray is now fully functional as a generic 
  469.    template class.
  470.  
  471.    Notes on the I/O library
  472.  
  473.    All of the I/O headers and sources have been completely rewritten to be 
  474.    more robust, higher performance and closer to the C++ standard.  Only the
  475.    most advanced use of certain parts of the I/O library should reveal any 
  476.    interface changes since Pro 2.  The standard I/O interfaces remain 
  477.    unchanged.
  478.  
  479.  
  480. ===================================================================
  481. *  Namespace std Implementation in MSL 2.4
  482. ===================================================================
  483.  
  484.    You can turn namespaces on and off.  It is on by default.  To turn it
  485.    off, do the following:
  486.  
  487.      1.  #define or comment out _MSL_USING_NAMESPACE in mslGlobals.h.  
  488.     
  489.      2.  Recompile the libraries using either the project files in the bin
  490.          directories, or use the build script.  If you use precompiled headers, 
  491.          don't forget to recompile them first. 
  492.  
  493.    The namespace update has a great deal of backward compatibility built
  494.    into it.  Part of this backward compatibility is dictated by the C++
  495.    standard.  Part of it is offered as an extension to the standard by
  496.    Metrowerks.  The bottom line is that your namespace-ignorant code is
  497.    likely to compile and run just fine!  If not, the fix to make it run
  498.    should be very easy (explained below).
  499.  
  500.    The Nov. '97 standard defines the following headers:
  501.  
  502.                        Table 2--C++ Library Headers
  503.  
  504.     +------------------------------------------------------------------+
  505.     |<algorithm>    <iomanip>    <list>      <ostream>     <streambuf> |
  506.     |<bitset>       <ios>        <locale>    <queue>       <string>    |
  507.     |<complex>      <iosfwd>     <map>       <set>         <typeinfo>  |
  508.     |<deque>        <iostream>   <memory>    <sstream>     <utility>   |
  509.     |<exception>    <istream>    <new>       <stack>       <valarray>  |
  510.     |<fstream>      <iterator>   <numeric>   <stdexcept>   <vector>    |
  511.     |<functional>   <limits>                                           |
  512.     +------------------------------------------------------------------+
  513.  
  514.    3 The facilities of the Standard C Library are provided in 18 additional
  515.      headers, as shown in Table 3:
  516.  
  517.               Table 3--C++ Headers for C Library Facilities
  518.  
  519.            +--------------------------------------------------+
  520.            |<cassert> <ciso646> <csetjmp> <cstdio>  <ctime>   |
  521.            |<cctype>  <climits> <csignal> <cstdlib> <cwchar>  |
  522.            |<cerrno>  <clocale> <cstdarg> <cstring> <cwctype> |
  523.            |<cfloat>  <cmath>   <cstddef>                     |
  524.            +--------------------------------------------------+
  525.  
  526.    All of these headers bury the C++ and C libraries under namespace std.
  527.    This means that printf is now named std::printf, and cout is now named
  528.    std::cout.
  529.  
  530.    Don't panic, help is on the way!  The standard defines the following
  531.    headers for backward compatibility:
  532.  
  533.                             Table 1--C Headers
  534.  
  535.      +----------------------------------------------------------------+
  536.      | <assert.h>   <iso646.h>   <setjmp.h>   <stdio.h>    <wchar.h>  |
  537.      | <ctype.h>    <limits.h>   <signal.h>   <stdlib.h>   <wctype.h> |
  538.      | <errno.h>    <locale.h>   <stdarg.h>   <string.h>              |
  539.      | <float.h>    <math.h>     <stddef.h>   <time.h>                |
  540.      +----------------------------------------------------------------+
  541.  
  542.    If you use these headers instead of the <cstdio> type guys, then the
  543.    symbol std::printf will appear to be named printf in your program.
  544.  
  545.    Additionally, Metrowerks defines the following compatibility headers:
  546.  
  547.    +----------------------------------------------------------------------+
  548.    |<algorithm.h>    <functional.h>    <list.h>    <ostream.h>    <streambuf.h> |
  549.    |<bitset.h>        <iomanip.h>        <map.h>        <queue.h>    <typeinfo.h>  |
  550.    |<bstring.h>        <ios.h>            <mlimits.h>    <set.h>        <typeinfo.h>  |
  551.    |<complex.h>        <iosfwd.h>        <mlocale.h>    <sstream.h>    <utility.h>      |
  552.    |<deque.h>        <iostream.h>    <new.h>        <stack.h>    <valarray.h>  |
  553.    |<exception.h>    <istream.h>        <numeric.h>    <stdexcept.h>              | 
  554.    |<fstream.h>        <iterator.h>                                          |
  555.    +----------------------------------------------------------------------+
  556.  
  557.    These headers are analogous to the <stdio.h> headers.  If you use these
  558.    then the std::library will appear to your code to be in the global
  559.    namespace;  that is the symbol std::cout will appear to have the name
  560.    cout.
  561.    
  562.    A few exceptions to the compatibility headers apply: <bstring.h> should
  563.    be used to retreive the contents for <string>; <mlocale.h> should be
  564.    used for <locale>; and <mlimits.h> should be used for <limits>.  If you
  565.    use <string.h>, <limits.h>, or <locale.h>, you will retrieve the C files,
  566.    not the C++ files.  Also note that these file names are non-portable.
  567.    If you include <bstring.h>, <mlimits.h>, or <mlocale.h> in your files,
  568.    you will not be able to port them to other compilation systems.
  569.    
  570.    ***********************  IMPORTANT WARNING  ****************************
  571.    We are depricating the compatibility headers in the next release, and
  572.    will remove them entirely in a future release.  Please begin converting
  573.    you  codes to the Standard header usage.
  574.    ************************************************************************
  575.  
  576.    To summarize:
  577.  
  578.    ===================================
  579.    #include <iostream>
  580.  
  581.    int main()
  582.    {
  583.       std::cout << "Hi\n";
  584.       return 0;
  585.    }
  586.  
  587.     // Runs fine.
  588.    ===================================
  589.    #include <iostream>
  590.    using namespace std;
  591.  
  592.    int main()
  593.    {
  594.       cout << "Hi\n";
  595.       return 0;
  596.    }
  597.  
  598.    // Runs fine.
  599.    ===================================
  600.    #include <iostream>
  601.  
  602.    int main()
  603.    {
  604.       cout << "Hi\n";
  605.       return 0;
  606.    }
  607.  
  608.    // Error: Undefined identifier cout
  609.    ===================================
  610.    #include <iostream.h>
  611.  
  612.    int main()
  613.    {
  614.       cout << "Hi\n";
  615.       return 0;
  616.    }
  617.   
  618.    // Runs fine.
  619.    ===================================
  620.  
  621.  
  622. ===================================================================   
  623. *  Header Naming Convention in MSL 2.4
  624. ===================================================================
  625.  
  626.    See notes above on namespace standard for C++ and C header names as 
  627.    defined by the C++ Standard.
  628.    
  629.    If you activate the C++ compiler, you will get the <cname> versions of
  630.    the C headers and all the definitions included under __cplusplus.  You
  631.    activate the C++ compiler in one of two ways: by file type (i.e., if the
  632.    name of the file indicates it is a C++ source file), or by preference
  633.    panel selection.  This means that your C files will now be under the std
  634.    namespace, and that you'll get the C++ behavior of the C files.  The only
  635.    place we found a problem was with the <cmath> file (see notes in next
  636.    section).  Be very conscientious of using C headers in C++ files. 
  637.    
  638.    The C header names and file contents have been altered to accommodate 
  639.    both the C and the C++ library without duplication of code.  The contents
  640.    of the <name.h> files have been moved into the <cname> files, and the 
  641.    <name.h> files include the <cname> files now.  The "using namespace std" 
  642.    directive is in the <name.h> file and will turn namespace std on iff the 
  643.    C++ compiler is activated (i.e., if the IDE or the compiler defines 
  644.    __cplusplus).  Otherwise, the expected behavior of <name.h> will be the 
  645.    same when the C compiler is activated, even though the contents are 
  646.    physically located in the <cname> file.  The preprocessor handles this
  647.    beautifully; however, it makes visually finding information a little bit 
  648.    trickier than before.
  649.    
  650.    -  The C++ library directory has been rearranged.  There are no longer
  651.       two subdirectories (Language Support, Library Support) under the
  652.       Include directory.  All include files are now directly under the
  653.       C++ Include directory.
  654.    
  655.    -  Non-standard C++ headers - use at your own peril - we reserve the
  656.       right to modify the file contents, names, and/or existence at will:
  657.  
  658.       algobase.h
  659.       extbasic.h
  660.       extfunc.h
  661.       extmath.h   
  662.       hashfun.h
  663.       hashmap.h    
  664.       hashmmap.h
  665.       hashmset.h
  666.       hashset.h
  667.       hashtbl.h
  668.       heap.h
  669.       mcompile.h
  670.       MSLstring.h
  671.       mtools.h
  672.       mutex.h
  673.       new_mem.h
  674.       RefCountedPtrArray.h
  675.       slist.h
  676.       tree.h
  677.       All the compatibility headers
  678.        
  679.    -  Non-standard C headers - use at your own peril - we reserve the
  680.       right to modify the file contents, names, and/or existence at will
  681.       (note: we will probably move these to Private Includes in the 
  682.       future):
  683.       
  684.       ansi_parms.h
  685.       div_t.h
  686.       mslGlobals.h
  687.       null.h
  688.       size_t.h
  689.       unix.h
  690.       va_list.h
  691.  
  692.    -  C++ headers that have been removed entirely from the library:
  693.  
  694.       ios_base.h                use <ios>
  695.       mexcept.h                    use <stdexcept>
  696.       mmemory.h                    use <memory>
  697.       tree                        use <tree.h>
  698.       valarray_double.h            use <valarray>
  699.       valarray_float.h            use <valarray>
  700.       valarray_longdouble.h        use <valarray>
  701.  
  702.    -  New C++ headers
  703.  
  704.       stdexcept      
  705.       stdexcept.h 
  706.                      
  707.    -  C header files:
  708.    
  709.       Renamed/added as per standard
  710.         cassert        csetjmp        cstdio        ctime
  711.         cctype        climits        csignal        cstdlib
  712.         cerrno        clocale        cstdarg        cstring
  713.         cfloat        cmath        cstddef
  714.  
  715.       New files:    
  716.         wchar.h     wctype.h 
  717.         cwchar        cwctype
  718.         ciso646        iso646.h
  719.  
  720.       Removed:
  721.         wchar_t.h
  722.  
  723.    -  Note that including <limits.h>, <string.h> and <locale.h> will 
  724.       retrieve the C header files.
  725.       
  726.    ***********************  IMPORTANT WARNING  ****************************
  727.    
  728.    We are depricating the compatibility headers in the next release, and
  729.    will remove them entirely in a future release.  Please begin converting
  730.    you  codes to the Standard header usage.
  731.    
  732.    <algorithm.h>    <functional.h>    <list.h>    <ostream.h>    <streambuf.h> 
  733.    <bitset.h>        <iomanip.h>        <map.h>        <queue.h>    <typeinfo.h>  
  734.    <bstring.h>        <ios.h>            <mlimits.h>    <set.h>        <typeinfo.h>  
  735.    <complex.h>        <iosfwd.h>        <mlocale.h>    <sstream.h>    <utility.h>      
  736.    <deque.h>        <iostream.h>    <new.h>        <stack.h>    <valarray.h>  
  737.    <exception.h>    <istream.h>        <numeric.h>    <stdexcept.h>               
  738.    <fstream.h>        <iterator.h>                                          
  739.    
  740.    ************************************************************************
  741.       
  742.    And, finally, a little humor from Ron Liechty:
  743.    
  744.       Sung to "Where Have All the Flowers Gone", by Peter Paul and Mary
  745.         
  746.           Where have all the bstrings gone
  747.           Gone to string for everyone
  748.           
  749.           When will they ever learn
  750.           When will they ever learn
  751.           
  752.           Where have all the name.h gone
  753.           Gone to cname everyone
  754.           
  755.           When will they ever learn
  756.           When will they ever learn
  757.       
  758.  
  759. ===================================================================
  760. *  Notes on <cmath> vs. <math.h>
  761. ===================================================================
  762.  
  763.    <cmath> (the C++ version of math.h) is not the same as <math.h> (the
  764.    real C <math.h> file).  Specifically, Section 26.5, paragraph 6 of the
  765.    C++ Standard overloads the float versions of the math functions.  This
  766.    causes an ambiguous reference to these routines when compiling a C
  767.    program with the C++ compiler.  We have found that some users expect 
  768.    <math.h> to be the C header, while others expect <math.h> to be the C++ 
  769.    version with the overloads.  We felt a compromise was necessary to assist 
  770.    folks in transitioning their codes to the new C++ standard.  If you want
  771.    <math.h> (and subsequently <cmath>) to behave like a C header, do nothing.
  772.    The library defaults to this behavior.  If you want the overloads as
  773.    specified by the C++ Committee, you must enable the 
  774.    #define __ANSI_OVERLOAD__  in ansi_parms.h.  You do not need to recompile
  775.    the library.
  776.    
  777.    Comment from ansi_parms.h:
  778.    /* hh 980217 
  779.     __ANSI_OVERLOAD__ controls whether or not the prototypes in the C++ 
  780.     standard section 26.5 get added to <cmath> and <math.h> or not.  If
  781.     __ANSI_OVERLOAD__ is defined, and a C++ compiler is used, then these 
  782.     functions are available, otherwise not.
  783.     
  784.     There is one exception to the above rule:  double abs(double); is 
  785.     available in <cmath> and <math.h> if the C++ compiler is used.  
  786.     __ANSI_OVERLOAD__ has no effect on the availability of this one function.
  787.     
  788.     There is no need to recompile the C or C++ libs when this switch is 
  789.     flipped.
  790.     */
  791.     /* #define __ANSI_OVERLOAD__ */
  792.    
  793.    
  794. ========================================================================
  795. *  Change in x86 mathematical functions from previous x86 behavior
  796. ========================================================================
  797.  
  798.    The ansi math library for Intel does all of its intermediate calculation 
  799.    in full precision in the fpu.  If using one or more of these functions in
  800.    an expression such as y = g(x) + sqrt(x), you may now notice behavior 
  801.    differing from past versions of CW targeting x86 platforms.  This is due 
  802.    to a change in the x86 compiler.  The compiler now safely assumes that 
  803.    the function g(x) might need all 8 fp registers so the expression sqrt(x)
  804.    must therefore spill out of the register into memory.  You may notice 
  805.    slightly less accurate results because the memory size is smaller than 
  806.    the register.  Thus, the last 16 bits of the fp register will bet rounded
  807.    intermediately before the expression is completely calculated.
  808.   
  809.      
  810. ===================================================================
  811. *  Using the functions in fenv.h on X86:
  812. ===================================================================
  813.  
  814.    In this version of fenv.h, the functionality provided is intended to 
  815.    match that of the Macintosh platforms.  The header follows the 
  816.    current draft standard; however, there are a couple of minor 
  817.    differences on the X86 platforms.
  818.    
  819.    The committee changed the names of feget/setexcept to 
  820.    feget/setexceptflag.  On X86, the latest are the functions and the 
  821.    former are macros defined in fenv.h. 
  822.    
  823.    The functions feset/getprec and feset/getround are more straight- 
  824.    forward and perform better than feset/getenv as they manipulate 
  825.    particular bits of just the control word instead of the whole fp 
  826.    environment.  Please use these functions instead.
  827.  
  828.  
  829. ===================================================================
  830. *  Compiling Pro 2 MFC with MSL2.4
  831. ===================================================================
  832.  
  833.    File Metrowerks\CodeWarrior Pro 2\Win32-x86 Support\Libraries\Mfc\
  834.    MFC 4.2 Source\OLEMisc.cpp, on or about line 964:
  835.   
  836.    Change from:
  837. swprintf(lpszBuf, (unsigned short *)lpszLinkedTypeFmt, lpszFullUserTypeName);
  838.      
  839.    To:
  840. swprintf(lpszBuf, sizeof(lpszBuf), lpszLinkedTypeFmt, lpszFullUserTypeName);
  841.      
  842.    You need to change the system access paths for the MFC42.mcp project file to: 
  843.      {Compiler}Metrowerks Standard Libraries\
  844.      {Compiler}Win32-x86 Support\Headers
  845.    These are the only two paths in the system access paths; all others are 
  846.    to be deleted.
  847.          
  848.    Pro 3 MFC works without changes with MSL2.4.
  849.    
  850.  
  851. ===================================================================
  852. *  WinSIOUX in MSL 2.4
  853. ===================================================================
  854.  
  855.    The Mac SIOUX-like project is now available for Windows.  This means that 
  856.    a new console window for WIN32 applications is available that permits
  857.    saving stdout to a file, printing it from a menu option, and includes a
  858.    scroll bar.  A new stationary on the windows platforms is included, named
  859.    WinSIOUX.  You will not get the standard DOS/NT console if you use this
  860.    stationary.  The remaining functions from SIOUX will be included in future
  861.    releases (for example, cut and paste, selecting font, and opening/closing
  862.    files from the menu).
  863.    
  864.  
  865. ===================================================================
  866. *  Wide Character Support in MSL 2.4
  867. ===================================================================
  868.  
  869.    Wide character support is now included in Metrowerks Standard Library, 
  870.    which allow the use of extended character sets such as Kanji, and Unicode
  871.    on win32 platforms.  This is a preliminary release and has not been
  872.    fully tested or optimized for wide character streams.
  873.    
  874.    The C++ built-in wchar_t is enabled with the preference panels.  In order 
  875.    to get the built-in wchar_t for C++ programs, you must have both the C++ 
  876.    compiler AND the wide character support boxes marked in the preference 
  877.    panels; otherwise, you will get the typedef appropriate for the 
  878.    architecture as defined in stddef.h.
  879.    
  880.    There are two include files that make up the support for wchar: cwchar 
  881.    and cwctype.  The sources for these routines are compiled into the 
  882.    standard C libraries and do not need to be included in your project.
  883.  
  884.    All routines listed below abide by the standards with exceptions listed 
  885.    as Non-Standard Behavior below.
  886.    
  887.    The routines for wchar.h include:
  888.  
  889.     fgetwc        fgetws        fputwc        fputws        fwprintf    fwscanf
  890.     getwc        getwchar    putwc        putwchar    swprintf    swscanf
  891.     vfwprintf    vfwscanf    vswprintf    vswscanf    vwprintf    vwscanf
  892.     wcscat        wcschr        wcscmp        wcscoll        wcscpy        wcscspn
  893.     wcsftime    wcslen        wcsncat        wcsncmp        wcsncpy        wcspbrk
  894.     wcsrchr        wcsspn        wcsstr        wcstod        wcstok        wcstol
  895.     wcstoll        wcstoul        wcstoull    wcsxfrm        wmemchr        wmemcmp
  896.     wmemcpy        wmemmove    wmemset        wprintf        wscanf
  897.  
  898.    The routines for wctype.h include:
  899.  
  900.     iswalnum    iswalpha    iswcntrl    iswdigit    iswgraph    iswlower
  901.     iswprint    iswpunct    iswspace    iswupper    iswxdigit    towctrans
  902.     towlower    towupper    wctrans
  903.  
  904.    Non-Standard Behavior
  905.  
  906.    1.  The multibyte routines are not supported in the current 
  907.        implementation.  These routines are documented in the headers as 
  908.        non-implemented.
  909.  
  910.         btowc        mbrlen        mbrtowc        mbsinit        mbsrtowcs    wcrtomb
  911.         wcsrtombs    wtomb
  912.  
  913.    2.  The function fwide is also not supported in this release and is 
  914.        documented  in the headers as such.
  915.  
  916.    3.  The routine wscanf will not perform as per the standard due to the 
  917.        lack of fwide.
  918.        
  919.    4.  The console will not be set properly for wide character input or 
  920.        output without the fwide function.
  921.  
  922.  
  923. ===================================================================   
  924. Miscellaneous Notes and Pro 2 Notes Relevant to Pro 3
  925. ===================================================================
  926.  
  927. *  Compiling SGI's STL with Pro 3: 
  928.    The current version of SGI's STL may be incompatible with the Pro3 
  929.    compiler and MSL 2.4 library.  A compatible version of SGI's STL will 
  930.    be available shortly at 
  931.        <http://www.metrowerks.com/tools/misc/hotlist.html> 
  932.  
  933. *  Precompiled header stationary sets precompiled headers to 4i-8d.  
  934.    When using precompiled headers built from the stationary, please 
  935.    ensure that the libraries you include in your project are also 4i-8d. 
  936.    If changing the precompiled headers preferences panels, please ensure 
  937.    that you build the associated libraries you plan to use with the same 
  938.    options.  A "#pragma check_header_flags" has been added to MSL.pch++ 
  939.    to help check for these types of errors. 
  940.    
  941. *  Improved clock for Mac platforms
  942.    To increase the tick count for the Mac platforms in order to use the 
  943.    facilities the Operating System provides, please change the following 
  944.    file:  
  945.        Metrowerks Standard Library/MSL C/MSL Mac/Public Includes/
  946.               timesize.mac.h
  947.    This file introduces a define (__TIMESIZE_DOUBLE) which enables the 
  948.    improved clock code in time.h and time.mac.c.  Please note that the 
  949.    clock_t typedef will change from an unsigned long to a type double. 
  950.    This also means that the clock function will change types.  Be sure 
  951.    you confirm in your code base that your return values are typed 
  952.    accordingly for clock and clock_t.
  953.    
  954. *  Multi-target project files.  You will see new project files with the 
  955.    string MTrg included in the project name.  This means that the project 
  956.    file can emit all targets from that single file, depending on your 
  957.    selection when you open the project file and choose a target.  However, 
  958.    it takes more time to open the multi-target project files.  This was
  959.    done for the windows platforms because scripting is not available in
  960.    the IDE on windows. 
  961.  
  962. *  Console applications for windows projects now stop before exiting so 
  963.    that output can be viewed.  This feature can be turned off by setting 
  964.    the preprocessor macro STOP_PROGRAM_BEFORE_EXIT in the windows 
  965.    prefix file, ansi_prefix.win32.h.  Be sure to rebuild MSL C after 
  966.    making this change.  Please note that if you redirect output to a 
  967.    serial device (such as a printer), you must still press enter to  
  968.    exit the program. 
  969.    
  970. *  There is a vbscript script in the "Metrowerks Standard Library" 
  971.    directory that rebuilds the precompiled header files, the win32 
  972.    runtime, and all MSL libraries.  Read the information at the top of 
  973.    the script file "msl_build.vbs" if you have problems running the 
  974.    script.  The file "msl_list" in the same directory can be configured 
  975.    to build exactly those libraries you wish to build.  If errors occur 
  976.    while building, they are logged in the file "error.log" in the 
  977.    "Metrowerks Standard Library" directory. 
  978.  
  979.  
  980. ========================================================================
  981. Contacting Metrowerks
  982. ========================================================================
  983.  
  984. For bug reports, technical questions, and suggestions, please use the
  985. forms in the Release Notes folder on the CD, and send them to
  986.  
  987. support@metrowerks.com
  988.  
  989. See the CodeWarrior on the Nets document in the Release Notes folder for
  990. more contact information, including a list of Internet newsgroups, 
  991. online services, and patch and update sites.
  992.  
  993. ========================================================================
  994.  
  995. Metrowerks Corporation
  996.